#ifndef __EMV_IF_H__
#define __EMV_IF_H__
#include <stdint.h>
#include "sl2x23.h"

// 复位，即SL2x23模块的RST引脚，接STM32的普通IO即可
#define               SL2x23_GPIO_RST_CLK_FUN                 RCC_APB2PeriphClockCmd
#define               SL2x23_GPIO_RST_CLK                     RCC_APB2Periph_GPIOB
#define               SL2x23_GPIO_RST_PORT    	              GPIOB
#define               SL2x23_GPIO_RST_PIN		              GPIO_Pin_8
#define               SL2x23_GPIO_RST_Mode		              GPIO_Mode_Out_PP

// IRQ中断，即SL2x23模块的IRQ引脚，使用外部中断
#define               SL2x23_GPIO_IRQ_CLK_FUN                 RCC_APB2PeriphClockCmd
#define               SL2x23_GPIO_IRQ_CLK                     RCC_APB2Periph_GPIOB
#define               SL2x23_GPIO_IRQ_PORT    	              GPIOB
#define               SL2x23_GPIO_IRQ_PIN                     GPIO_Pin_9
#define               SL2x23_GPIO_IRQ_Mode		              GPIO_Mode_IPU   /* IRQ脚上拉输入模式 */
// IRQ中断线
#define           SL2x23_IRQ_EXTI_CLK_FUN            RCC_APB2PeriphClockCmd
#define           SL2x23_IRQ_EXTI_CLK                RCC_APB2Periph_AFIO
#define           SL2x23_IRQ_EXTI_IRQ                EXTI9_5_IRQn
#define           SL2x23_IRQ_EXTI_LINE               EXTI_Line9
#define           SL2x23_IRQ_EXTI_PORTSOURCE         GPIO_PortSourceGPIOB
#define           SL2x23_IRQ_EXTI_PINSOURCE          GPIO_PinSource9
#define           SL2x23_IRQPin_IRQHandler           EXTI9_5_IRQHandler

#if defined IIC_Mode
//R8===SCK
#define               SL2x23_GPIO_R8_CLK                     RCC_APB2Periph_GPIOB
#define               SL2x23_GPIO_R8_PORT    	             GPIOB
#define               SL2x23_GPIO_R8_PIN                     GPIO_Pin_12
#define               SL2x23_GPIO_R8_Mode		             GPIO_Mode_Out_OD

//R9===MOSI
#define               SL2x23_GPIO_R9_CLK                     RCC_APB2Periph_GPIOB
#define               SL2x23_GPIO_R9_PORT    	             GPIOB
#define               SL2x23_GPIO_R9_PIN                     GPIO_Pin_13
#define               SL2x23_GPIO_R9_Mode		             GPIO_Mode_Out_OD
#endif

// SL2x23 RST复位（NRSTPD 引脚低电平有效）
#define           NRSTPD_LOW        GPIO_ResetBits( SL2x23_GPIO_RST_PORT, SL2x23_GPIO_RST_PIN )
#define           NRSTPD_HIGH       GPIO_SetBits( SL2x23_GPIO_RST_PORT, SL2x23_GPIO_RST_PIN )


//空的定义  什么也不做
#define _ASSERT_SPI_CLK_LOW();
#define _RELEASE_SPI_CLK_LOW();

#if defined IIC_Mode
void SL2x23_R8R9_Config(void);
#endif

void SL2x23_RST_INT_EXTI_Config(void);


void delay_1ms(uint32_t delay_time);
void write_reg(uint8_t addr, uint8_t val);
uint8_t read_reg(uint8_t addr);

void spi_wr_test(void);
void sl2823_test(void);
extern volatile uint8_t irq_flag_io;
#endif
